package com.zzh.partnersys.im.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;

import java.io.Serial;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * <p>
 * 消息元数据表
 * </p>
 *
 * @author zzh
 * @since 2025-11-19
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("chat_message")
public class ChatMessage implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 消息ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 聊天类型（1-单聊，2-群聊）
     */
    @TableField("chatType")
    private Integer chatType;

    /**
     * 目标ID（单聊=chat_session.id，群聊=chat_group.id）
     */
    @TableField("targetId")
    private Long targetId;

    /**
     * 关联AI助手ID（单聊=chat_session.assistantId，群聊=chat_group.assistantId，用户-用户单聊时为NULL）
     */
    @TableField("assistantId")
    private Long assistantId;

    /**
     * 发送者ID（用户=sys_user.id，AI=0）
     */
    @TableField("senderId")
    private Long senderId;

    /**
     * 发送者类型（1-用户，2-AI）
     */
    @TableField("senderType")
    private Integer senderType;

    /**
     * 接收者ID（单聊必填：用户-用户时为另一方用户ID，用户-AI时为用户ID；群聊为NULL）
     */
    @TableField("receiverId")
    private Long receiverId;

    /**
     * 消息类型（1-文本，2-图片，3-文件，4-语音，5-表情包）
     */
    @TableField("msgType")
    private Integer msgType;

    /**
     * 关联消息内容ID（chat_message_content.id）
     */
    @TableField("contentId")
    private Long contentId;

    /**
     * 会话/群内消息序号（连续不跳号，用于游标分页）
     */
    @TableField("sequence")
    private Integer sequence;

    /**
     * 消息token数（仅AI相关消息需填）
     */
    @TableField("tokenCount")
    private Integer tokenCount;

    /**
     * 消息是否完整（1-完整，0-不完整）
     */
    @TableField("isComplete")
    private Integer isComplete;

    /**
     * 发送时间
     */
    @TableField("sendTime")
    private LocalDateTime sendTime;

    /**
     * 已读时间（单聊必填，群聊忽略）
     */
    @TableField("readTime")
    private LocalDateTime readTime;

    /**
     * 是否删除（0-否，1-是）
     */
    @TableField("isDelete")
    private Integer isDelete;


}
